package com.example.sentinel.config;

import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate;
import com.fasterxml.jackson.databind.util.ExceptionUtil;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestClient;

@Configuration
public class SentinelConfig {

    // 定制化 RestClient 供所有 Java 服务接口使用。对于 WebClient 同理
    @Bean
    @SentinelRestTemplate(blockHandler = "handleException", blockHandlerClass = ExceptionUtil.class)
    public RestClient restClient() {
        // 创建一个 RestClient 实例
        return RestClient.builder()
                .baseUrl("https://api.github.com/")
                // 对于 RestClient，默认情况下，RestClient 会针对 4xx 和 5xx HTTP 状态码抛出 RestClientException。要自定义此行为，
                // 请注册一个响应状态处理程序，该处理程序适用于通过客户端执行的所有响应。
                // .defaultStatusHandler(HttpStatusCode::isError, (request, response) -> {})
                .build();
    }

}

// 配置参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel